package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import utilidades.Constants;
import utilidades.ConstantsBusiness;
import vo.TacticaVO;
import vo.UsuarioVO;
import exception.DaoException;

public class UsuarioDAO extends DAOObjectImpl{
			
	public UsuarioDAO(Connection aConexion) {
		this.conexion=aConexion;
	}

	/**
	 * Obtiene los datos del usuario con el nick pasado como parametro
	 * @param aCriteria Datos del usuario a buscar
	 * @return UsuarioVO con los datos del usuario
	 * @throws DaoException Posible excepcion a controlar
	 */
	public Object load(Object aCriteria) throws DaoException{
		
		String tmpQuery = Constants.CADENA_VACIA;
		ResultSet tmpDatos = null;
		UsuarioVO tmpResultado = null;
		PreparedStatement tmpSentencia = null;
		try{
			tmpQuery = ConstantsBusiness.USUARIO_LOAD;
			tmpSentencia=conexion.prepareStatement(tmpQuery);
			tmpSentencia.setString(1, ((UsuarioVO) aCriteria).getNick());
			tmpDatos = tmpSentencia.executeQuery();
			if (tmpDatos.next()){
				tmpResultado = new UsuarioVO(
						tmpDatos.getString("nick"),
						tmpDatos.getString("password"), 
						tmpDatos.getString("email"), 
						tmpDatos.getString("nombre"), 
						tmpDatos.getString("apellidos"), 
						Integer.valueOf(tmpDatos.getInt("idGrupo")), 
						Integer.valueOf(tmpDatos.getInt("puntos")), 
						tmpDatos.getString("cuenta"), 
						tmpDatos.getString("perfil"),
						new TacticaVO(tmpDatos.getInt("idTactica")));
			}
			return tmpResultado;
		} catch (SQLException aSqlException){
			throw new DaoException(aSqlException.getMessage());
		} finally {
			try{
				if (tmpDatos!=null){
					tmpDatos.close();
				}
				if (tmpSentencia!=null){
					tmpSentencia.close();
				}
			}catch(SQLException aSqlException){
				throw new DaoException(aSqlException.getMessage());
			}			
		}
	}
}
